// 引入我们创建的模块
const { generatePieChartImage, generateRandomPieData, createPieChartOption, echartsToBase64 } = require('./index');
const fs = require('fs').promises;
const path = require('path');

/**
 * 示例1: 基本使用 - 生成随机饼图并打印base64数据
 */
async function basicExample() {
  console.log('===== 基本示例 =====');
  try {
    const imageSrc = await generatePieChartImage();
    // 由于base64数据很长，我们只打印前200个字符
    console.log('生成的图片src前200个字符:', imageSrc.substring(0, 200) + '...');
    console.log('完整图片src长度:', imageSrc.length, '字符');
  } catch (error) {
    console.error('基本示例失败:', error);
  }
}

/**
 * 示例2: 自定义参数 - 生成指定数量的数据项
 */
async function customDataExample() {
  console.log('\n===== 自定义数据示例 =====');
  try {
    // 生成4个数据项的随机数据
    const customData = generateRandomPieData(4);
    console.log('自定义4个数据项:', customData);
    
    // 创建图表配置
    const option = createPieChartOption(customData);
    
    // 转换为base64图片，指定宽度和高度
    const imageSrc = await echartsToBase64(option, 600, 400);
    console.log('自定义图表图片生成成功，长度:', imageSrc.length, '字符');
  } catch (error) {
    console.error('自定义数据示例失败:', error);
  }
}

/**
 * 示例3: 保存图片到文件
 */
async function saveToFileExample() {
  console.log('\n===== 保存到文件示例 =====');
  try {
    const imageSrc = await generatePieChartImage();
    
    // 提取base64数据（去掉data:image/png;base64,前缀）
    const base64Data = imageSrc.replace(/^data:image\/png;base64,/, '');
    const binaryData = Buffer.from(base64Data, 'base64');
    
    // 保存到文件
    const outputPath = path.join(__dirname, 'pie_chart_example.png');
    await fs.writeFile(outputPath, binaryData);
    console.log(`图片已保存到: ${outputPath}`);
  } catch (error) {
    console.error('保存到文件示例失败:', error);
  }
}

/**
 * 示例4: 创建一个简单的HTTP服务器，提供图表图片服务
 */
async function httpServerExample() {
  console.log('\n===== HTTP服务器示例 =====');
  console.log('此示例将创建一个简单的HTTP服务器，访问 http://localhost:3000/chart 可以获取图表图片');
  
  // 这里只是展示如何在HTTP服务器中使用，不会实际启动服务器
  /*
  const http = require('http');
  
  const server = http.createServer(async (req, res) => {
    if (req.url === '/chart') {
      try {
        const imageSrc = await generatePieChartImage();
        const base64Data = imageSrc.replace(/^data:image\/png;base64,/, '');
        const binaryData = Buffer.from(base64Data, 'base64');
        
        res.writeHead(200, {
          'Content-Type': 'image/png',
          'Content-Length': binaryData.length
        });
        res.end(binaryData);
      } catch (error) {
        res.writeHead(500, { 'Content-Type': 'text/plain' });
        res.end('Error generating chart: ' + error.message);
      }
    } else {
      res.writeHead(404, { 'Content-Type': 'text/plain' });
      res.end('Not found');
    }
  });
  
  server.listen(3000, () => {
    console.log('Server running at http://localhost:3000/');
  });
  */
}

/**
 * 运行所有示例
 */
async function runAllExamples() {
  console.log('开始运行ECharts饼图转图片示例...\n');
  
  await basicExample();
  await customDataExample();
  await saveToFileExample();
  await httpServerExample();
  
  console.log('\n所有示例运行完成！');
}

// 运行示例
if (require.main === module) {
  runAllExamples().catch(error => {
    console.error('运行示例时出错:', error);
  });
}

module.exports = {
  runAllExamples,
  basicExample,
  customDataExample,
  saveToFileExample,
  httpServerExample
};